package org.inspiration.dudu.user.service.impl;

import lombok.RequiredArgsConstructor;
import org.inspiration.dudu.user.mapper.UserFavoriteMapper;
import org.inspiration.dudu.user.model.dto.UserFavoriteDTO;
import org.inspiration.dudu.user.model.entity.UserFavoriteEntity;
import org.inspiration.dudu.user.service.UserFavoriteService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户收藏服务实现类
 */
@Service
@RequiredArgsConstructor
public class UserFavoriteServiceImpl implements UserFavoriteService {

    private final UserFavoriteMapper userFavoriteMapper;

    /**
     * 创建用户收藏
     * 
     * @param userFavoriteDTO 用户收藏数据传输对象
     */
    @Override
    public void createUserFavorite(UserFavoriteDTO userFavoriteDTO) {
        userFavoriteMapper.createUserFavorite(transToEntity(userFavoriteDTO));
    }

    /**
     * 删除用户收藏
     * 
     * @param userFavoriteDTO 用户收藏数据传输对象
     */
    @Override
    public void deleteUserFavorite(UserFavoriteDTO userFavoriteDTO) {
        userFavoriteMapper.deleteUserFavorite(userFavoriteDTO);
    }

    /**
     * 检查内容是否为用户的收藏
     * 
     * @param userId 用户ID
     * @param contentId 内容ID
     * @return 如果是收藏返回true，否则返回false
     */
    @Override
    public Boolean isFavorite(Long userId, String contentId) {
        return userFavoriteMapper.isFavorite(userId, contentId) > 0;
    }

    /**
     * 获取用户的收藏列表
     * 
     * @param userId 用户ID
     * @param favoriteFolderId 收藏夹ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 用户收藏实体列表
     */
    @Override
    public List<UserFavoriteEntity> getUserFavoriteByUserId(Long userId, Long favoriteFolderId, Integer pageNum, Integer pageSize) {
        return userFavoriteMapper.getUserFavorites(userId, favoriteFolderId, (pageNum - 1) * pageSize, pageSize);
    }

    /**
     * 将用户收藏数据传输对象转换为用户收藏实体
     * 
     * @param userFavoriteDTO 用户收藏数据传输对象
     * @return 用户收藏实体
     */
    @Override
    public UserFavoriteEntity transToEntity(UserFavoriteDTO userFavoriteDTO) {
        UserFavoriteEntity userFavoriteEntity = new UserFavoriteEntity();
        BeanUtils.copyProperties(userFavoriteDTO, userFavoriteEntity);
        return userFavoriteEntity;
    }

    /**
     * 检查文件夹是否为用户的收藏
     * 
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param folderId 文件夹ID
     * @return 如果是收藏返回true，否则返回false
     */
    @Override
    public Boolean isFolderFavorite(Long userId, String contentId, Long folderId) {
        return userFavoriteMapper.isFolderFavorite(userId, contentId, folderId) > 0;
    }
}
